1. 입출력 (I/O)
Scanner — 간단한 입력
import java.util.Scanner;
Scanner sc = new Scanner(System.in);
int num = sc.nextInt();
String word = sc.next();
sc.nextLine(); // 버퍼 비우기
String line = sc.nextLine();
while (sc.hasNextInt()) {
int nextNum = sc.nextInt();
}
sc.close();
BufferedReader — 빠른 입력 (대량 입력 시 필수)
import java.io.*;
import java.util.StringTokenizer;
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String line = br.readLine();
StringTokenizer st = new StringTokenizer(line, " ");
int num = Integer.parseInt(st.nextToken());
br.close();
BufferedWriter — 빠른 출력 (출력이 많을 때 TLE 방지)
import java.io.*;
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
bw.write("Hello\n");
bw.flush();
bw.close();
// 또는 StringBuilder로 모아서 한 번에 출력
StringBuilder sb = new StringBuilder();
sb.append("Hello\n");
sb.append("World\n");
System.out.print(sb);
2. 자료구조
List (ArrayList)
import java.util.*;
List<Integer> list = new ArrayList<>();
list.add(10);
list.add(0, 5); // 0번 인덱스에 삽입
list.set(0, 1); // 값 변경
int val = list.get(0);
list.remove(0); // 인덱스로 삭제
list.remove(Integer.valueOf(10)); // 값으로 삭제
list.size();
list.isEmpty();
list.contains(10);
list.clear();
Map (HashMap / TreeMap)
// HashMap — O(1), 순서 없음
Map<String, Integer> map = new HashMap<>();
map.put("apple", 1);
map.get("apple");
map.getOrDefault("orange", 0); // 키 없으면 기본값
map.remove("apple");
map.containsKey("apple");
map.containsValue(3);
map.size();
for (Map.Entry<String, Integer> entry : map.entrySet()) {
System.out.println(entry.getKey() + ": " + entry.getValue());
}
// TreeMap — O(log N), 키 기준 정렬 + 범위 탐색
TreeMap<Integer, String> treeMap = new TreeMap<>();
treeMap.put(3, "c");
treeMap.floorKey(4); // 4 이하 최댓값 키
treeMap.ceilingKey(2); // 2 이상 최솟값 키
treeMap.firstKey(); // 가장 작은 키
treeMap.lastKey(); // 가장 큰 키
treeMap.subMap(1, 5); // 1 이상 5 미만 키의 부분 Map
Set (HashSet / TreeSet)
// HashSet — O(1), 순서 없음
Set<Integer> set = new HashSet<>();
set.add(10);
set.remove(10);
set.contains(10);
// TreeSet — O(log N), 정렬 + 범위 탐색
TreeSet<Integer> treeSet = new TreeSet<>();
treeSet.add(3);
treeSet.floor(4); // 4 이하 최댓값
treeSet.ceiling(2); // 2 이상 최솟값
treeSet.first();
treeSet.last();
treeSet.subSet(1, 5); // 1 이상 5 미만
Queue / Deque / Stack
// Queue (FIFO)
Queue<Integer> q = new LinkedList<>();
q.offer(10);
q.peek(); // 확인
q.poll(); // 꺼내기
// Stack (LIFO) — ArrayDeque 사용 권장
Deque<Integer> stack = new ArrayDeque<>();
stack.push(10);
stack.peek();
stack.pop();
// Deque (양방향)
Deque<Integer> dq = new ArrayDeque<>();
dq.addFirst(10);
dq.addLast(20);
dq.pollFirst();
dq.pollLast();
PriorityQueue (Heap)
// 최소 힙 (기본)
PriorityQueue<Integer> minHeap = new PriorityQueue<>();
minHeap.add(10);
minHeap.poll(); // 가장 작은 값
// 최대 힙
PriorityQueue<Integer> maxHeap = new PriorityQueue<>(Collections.reverseOrder());
// 객체 기준 정렬
PriorityQueue<int[]> pq = new PriorityQueue<>((a, b) -> a[0] - b[0]); // 0번 인덱스 기준
3. 배열 (Arrays)
import java.util.Arrays;
int[] arr = {3, 1, 5, 2, 4};
Arrays.sort(arr); // 오름차순
Arrays.sort(arr, 0, 3); // 부분 정렬 (0~2)
// 2D 배열 정렬
int[][] arr2d = {{3, 1}, {1, 2}, {2, 3}};
Arrays.sort(arr2d, (a, b) -> a[0] - b[0]); // 0번 기준 오름차순
// 다중 조건 정렬
Arrays.sort(arr2d, (a, b) -> {
if (a[0] != b[0]) return a[0] - b[0]; // 첫 번째 기준
return a[1] - b[1]; // 두 번째 기준
});
int index = Arrays.binarySearch(arr, 3); // 이진탐색 (정렬 필수)
Arrays.fill(arr, 0); // 전체 채우기
int[] copy = Arrays.copyOf(arr, arr.length);
int[] range = Arrays.copyOfRange(arr, 1, 4);
System.out.println(Arrays.toString(arr)); // 1D 출력
System.out.println(Arrays.deepToString(arr2d)); // 2D 출력
4. 문자열 (String / StringBuilder / Character)
String
String str = "Hello World";
str.length();
str.charAt(0); // 'H'
str.substring(6); // "World"
str.substring(0, 5); // "Hello"
str.split("-"); // 분리
str.contains("World");
str.startsWith("He");
str.endsWith("ld");
str.indexOf("l"); // 첫 번째 위치
str.lastIndexOf("l");
str.replace("l", "p");
str.toLowerCase();
str.toUpperCase();
str.trim(); // 앞뒤 공백 제거
str.toCharArray();
String.valueOf(123); // 숫자 → 문자열
str.equals("Hello World"); // 문자열 비교 (== 쓰지 말 것)
StringBuilder
StringBuilder sb = new StringBuilder("Hello");
sb.append(" World");
sb.insert(0, "Java ");
sb.delete(0, 5);
sb.deleteCharAt(0);
sb.setCharAt(0, 'h');
sb.reverse();
sb.length();
sb.toString();
Character
Character.isDigit('5'); // true
Character.isLetter('a'); // true
Character.isUpperCase('A'); // true
Character.isLowerCase('a'); // true
Character.toUpperCase('a'); // 'A'
Character.getNumericValue('5'); // 5
5. 숫자 유틸리티
Integer / Long 상수 & 변환
int maxInt = Integer.MAX_VALUE; // 2,147,483,647
int minInt = Integer.MIN_VALUE; // -2,147,483,648
long maxLong = Long.MAX_VALUE; // 9,223,372,036,854,775,807
Integer.parseInt("123"); // String → int
Long.parseLong("123456789012"); // String → long
Integer.toString(123); // int → String
String.valueOf(123L); // long → String
비트 연산 (비트마스크 문제)
Integer.toBinaryString(10); // "1010"
Integer.bitCount(10); // 1인 비트 개수 → 2
Integer.highestOneBit(10); // 가장 높은 비트 → 8
n & (1 << i); // i번째 비트 확인
n | (1 << i); // i번째 비트 설정
n ^ (1 << i); // i번째 비트 토글
Math
Math.max(10, 20);
Math.min(10, 20);
Math.abs(-10);
Math.pow(2, 3); // 8.0
Math.sqrt(9); // 3.0
Math.round(3.5); // 4
Math.ceil(3.1); // 4.0
Math.floor(3.9); // 3.0
Math.log(Math.E); // 1.0
6. Collections 유틸리티
List<Integer> list = new ArrayList<>(Arrays.asList(3, 1, 5, 2, 4));
Collections.sort(list); // 오름차순
Collections.sort(list, Collections.reverseOrder()); // 내림차순
Collections.reverse(list);
Collections.shuffle(list);
Collections.max(list);
Collections.min(list);
Collections.frequency(list, 3); // 3의 개수
Collections.binarySearch(list, 3); // 이진탐색 (정렬 필수)
Collections.swap(list, 0, 1);
Collections.fill(list, 0);
Collections.nCopies(5, 0); // 0이 5개인 리스트